package com.zzyl.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.zzyl.constant.Constants;
import com.zzyl.dto.BedDto;
import com.zzyl.entity.Bed;
import com.zzyl.enums.BasicEnum;
import com.zzyl.exception.BaseException;
import com.zzyl.mapper.BedMapper;
import com.zzyl.service.BedService;
import com.zzyl.vo.BedVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class BedServiceImpl implements BedService {

    @Autowired
    private BedMapper bedMapper;

    @Override
    public List<BedVo> getBedsByRoomId(Long roomId) {
        return bedMapper.getBedsByRoomId(roomId);
    }

    /**
     * 新增床位
     *
     * @param bedDto
     */
    @Override
    public void create(BedDto bedDto) {
        //1、把dto转换成bed对象
        Bed bed = BeanUtil.toBean(bedDto, Bed.class);
        //2、补充其他字段
        //设置床位为空闲状态  床位状态: 未入住0, 已入住1 入住申请中2
        bed.setBedStatus(Constants.BED_STATUS_FREE);
        //LocalDateTime now = LocalDateTime.now();
        //创建时间
        //bed.setCreateTime(now);
        //更新时间
        //bed.setUpdateTime(now);
        //创建人id       //TODO
        bed.setCreateBy(1671403256519078138l);
        //更新人id
        //调用mapper

        try {
            bedMapper.addBed(bed);
        } catch (Exception e) {
            //当重复录入床位编号时，则抛出新增床位失败 抛出异常
            throw new BaseException(BasicEnum.BED_INSERT_FAIL);
        }
    }

    /**
     * 更新床位信息
     *
     * @param bedDto
     */
    @Override
    public void update(BedDto bedDto) {
        //把dto转换成bed对象
        Bed bed = BeanUtil.toBean(bedDto, Bed.class);

        bed.setCreateBy(1l);
        //调用mapper
          bedMapper.updateBed(bed);

    }

    /**
     * 根据ID查询床位信息
     *
     * @param id
     * @return
     */
    @Override
    public BedVo getBedById(Long id) {
        //调用mapper
        BedVo bedVo = bedMapper.getBedsById(id);
        return bedVo ;
    }

    /**
     * 根据ID删除床位
     *
     * @param id
     */
    @Override
    public void delete(Long id) {
        //调用mapper
        //判断床位状态
        BedVo bed = bedMapper.getBedsById(id);
        Integer bedStatus = bed.getBedStatus();
        if(bedStatus.equals(Constants.BED_STATUS_FREE)){//床位状态: 未入住0可以删除
            bedMapper.delete(id);
        }
        // 已入住1 入住申请中2 不能删除



    }
}

